package com.bwie.exception;

import com.bwie.pojo.Result;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.math.BigDecimal;

/**
 * @program: yun_parking
 * @ClassName ProjectExceptionAdvice
 * @description:
 * @author: wdd
 * @create: 2024-08-16 00:22
 * @Version 1.0
 * 统一异常处理类
 **/
//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
@RestControllerAdvice//该注解作用在某一个类上，表示该类是统一异常处理类
public class ProjectExceptionAdvice {
    //@RestController  = @ResponseBody + @Controller

    //@ExceptionHandler用于设置当前处理器类对应的异常类型
    @ExceptionHandler(SystemException.class)//表示要处理哪一种异常
    public Result doSystemException(SystemException ex) {
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return Result.error(ex.getMessage());
    }

    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex) {
        ex.printStackTrace();//打印异常
        return Result.error(ex.getMessage());
    }

    //除了自定义的异常处理器，保留对Exception类型的异常处理，用于处理非预期的异常
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex) {
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        ex.printStackTrace();//打印异常

        String message = ex.getMessage();
        if(StringUtils.isNotEmpty(message) && (message.contains("BusinessException") || message.contains("SystemException"))){
            return Result.error(message.split(":")[1]);
        }

        return Result.error("系统繁忙，请稍后再试！");
    }




}